package com.monitor.network;

import javax.swing.JOptionPane;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;

/**
 * JSON工具类，用于处理JSON数据的序列化和反序列化
 * 使用阿里巴巴FastJSON库实现
 */
public class JsonUtil {
    
    /**
     * 将注册信息转换为JSON字符串
     * 
     * @param registrationCode 注册码
     * @param company 公司/单位名称
     * @param email 电子邮件
     * @param phone 电话号码
     * @param securityQuestion 安全问题
     * @param securityAnswer 安全问题答案
     * @return JSON格式的字符串
     */
    public static String toJson(String registrationCode, String company, String email, 
                               String phone, String securityQuestion, String securityAnswer) {
        return toJson(registrationCode, company, email, phone, securityQuestion, securityAnswer, null);
    }

    /**
     * 将注册信息转换为JSON字符串（包含设备类型）
     *
     * @param registrationCode 注册码
     * @param company 公司/单位名称
     * @param email 电子邮件
     * @param phone 电话号码
     * @param securityQuestion 安全问题
     * @param securityAnswer 安全问题答案
     * @param deviceType 设备类型（0表示一体机，1表示机房设备）
     * @return JSON格式的字符串
     */
    public static String toJson(String registrationCode, String company, String email,
                               String phone, String securityQuestion, String securityAnswer, Integer deviceType) {
        return toJson(registrationCode, company, email, phone, securityQuestion, securityAnswer, deviceType, null,null);
    }
    
    /**
     * 将注册信息转换为JSON字符串（包含设备类型和系统信息）
     *
     * @param registrationCode 注册码
     * @param company 公司/单位名称
     * @param email 电子邮件
     * @param phone 电话号码
     * @param securityQuestion 安全问题
     * @param securityAnswer 安全问题答案
     * @param deviceType 设备类型（0表示一体机，1表示机房设备，2表示教师设备）
     * @param systemInfo 系统硬件信息
     * @return JSON格式的字符串
     */
    public static String toJson(String registrationCode, String company, String email,
                               String phone, String securityQuestion, String securityAnswer, 
                               Integer deviceType, java.util.Map<String, String> systemInfo,String remark) {
        JSONObject jsonObj = new JSONObject();
        jsonObj.put("invitationCode", registrationCode != null ? registrationCode : "");
        jsonObj.put("company", company != null ? company : "");
        jsonObj.put("registrationCode", registrationCode != null ? registrationCode : "");
        jsonObj.put("deptName", company != null ? company : "");
        jsonObj.put("email", email != null ? email : "");
        jsonObj.put("phone", phone != null ? phone : "");
        jsonObj.put("securityQuestion", securityQuestion != null ? securityQuestion : "");
        jsonObj.put("securityAnswer", securityAnswer != null ? securityAnswer : "");
        jsonObj.put("remark", remark != null ? remark : "");
        if (deviceType != null) {
            jsonObj.put("deviceType", deviceType);
        }
        // 添加系统硬件信息
        if (systemInfo != null && !systemInfo.isEmpty()) {
            //jsonObj.put("osName", systemInfo.get("osName"));
            jsonObj.put("windowsVersion", systemInfo.get("osVersion"));
            jsonObj.put("manufacturer", systemInfo.get("manufacturer"));
            jsonObj.put("model", systemInfo.get("model"));
            jsonObj.put("macAddress", systemInfo.get("macAddress"));
            jsonObj.put("memory", systemInfo.get("totalMemoryGB"));
            jsonObj.put("hardDisk", systemInfo.get("totalDiskSizeGB"));
            jsonObj.put("networkCard", systemInfo.get("networkInfo"));
            jsonObj.put("graphicsCard", systemInfo.get("gpuInfo"));
            jsonObj.put("processor", systemInfo.get("cpuName"));
            jsonObj.put("hardwareId", systemInfo.get("hardwareId"));
        }
        
        return jsonObj.toJSONString();
    }
    
    /**
     * 解析JSON响应字符串为RegistrationResponse对象
     * 
     * @param jsonResponse JSON响应字符串
     * @return RegistrationResponse对象，如果解析失败返回null
     */
    public static RegistrationResponse parseRegistrationResponse(String jsonResponse) {
        try {
            // 使用FastJSON解析JSON字符串
            JSONObject jsonObj = JSON.parseObject(jsonResponse);
            RegistrationResponse response = new RegistrationResponse();
            
            // 提取code
            if (jsonObj.containsKey("code")) {
                response.setCode(jsonObj.getIntValue("code"));
            }
            
            // 提取msg
            if (jsonObj.containsKey("msg")) {
                response.setMsg(jsonObj.getString("msg"));
            }
            
            // 提取data对象
            if (jsonObj.containsKey("data") && jsonObj.getObject("data", JSONObject.class) != null) {
                JSONObject dataObj = jsonObj.getJSONObject("data");
                RegistrationResponse.RegistrationData data = new RegistrationResponse.RegistrationData();
                
                // 提取deviceId
                if (dataObj.containsKey("deviceId")) {
                    data.setDeviceId(dataObj.getString("deviceId"));
                }
                
                // 提取token
                if (dataObj.containsKey("token")) {
                    data.setToken(dataObj.getString("token"));
                }
                
                // 提取refreshToken
                if (dataObj.containsKey("refreshToken")) {
                    data.setRefreshToken(dataObj.getString("refreshToken"));
                }
                
                response.setData(data);
            }
            
            return response;
        } catch (Exception e) {
            JOptionPane.showMessageDialog(null, "解析响应数据失败: " + e.getMessage(), 
                                        "错误", JOptionPane.ERROR_MESSAGE);
            return null;
        }
    }
}